Bug 65

Bug Description:

This is a deadlock.
The following is an example of deadlock threads:

"Thread-1": waiting to lock monitor 0x00000000062a6ce0 (object 0x00000000ec278078, a
org.apache.commons.pool.impl.GenericKeyedObjectPool), which is held by "Thread-0"
"Thread-0": waiting to lock monitor 0x00000000076790e8 (object 0x00000000ec280078, a
org.apache.commons.dbcp.PoolingConnection), which is held by "Thread-1"

Java stack information for the threads listed above:
===================================================
Thread-1:
at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:715)
- waiting to lock <0x00000000ec2b0070> (a org.apache.commons.pool.impl.GenericKeyedObjectPool) at org.apache.commons.dbcp.PoolingConnection.prepareStatement(PoolingConnection.java:87) - locked <0x00000000ec2a80d8> (a org.apache.commons.dbcp.PoolingConnection) at Dbcp65$Thread2.run(Dbcp65.java:86) Thread-0: at org.apache.commons.dbcp.AbandonedTrace.addTrace(AbandonedTrace.java:173) - waiting to lock <0x00000000ec2a80d8> (a org.apache.commons.dbcp.PoolingConnection) at org.apache.commons.dbcp.PoolablePreparedStatement.activate(PoolablePreparedStatement.java:92) at org.apache.commons.dbcp.PoolingConnection.activateObject(PoolingConnection.java:228) at org.apache.commons.pool.impl.GenericKeyedObjectPool.evict(GenericKeyedObjectPool.java:991) - locked <0x00000000ec2b0070> (a org.apache.commons.pool.impl.GenericKeyedObjectPool) at Dbcp65$Thread1.run(Dbcp65.java:74)
More details about this bug are at DBCP-65 JIRA page.

How To Reproduce:

This bug is reproduced under dbcp 1.2 and JDK 1.6.0_33.
Execute the following scripts to run the test to reproduce the bug (assume the location of the dbcp test project is dbcp_test_home).
Linux:
${dbcp_test_home}/scripts/65.sh [--monitoroff]
Windows:
%dbcp_test_home%\scripts\65.bat [--monitoroff]

Example: Use monitor to report and terminate the program when deadlock happens:
${dbcp_test_home}/scripts/270.sh


Turn off monitor:
${dbcp_test_home}/scripts/270.sh --monitoroff

Option Function
--monitoroff,-mo Turn off to stop reporting bug messages and ending program when test
runs into the expected concurrency bug which is a deadlock.
User has to terminate the program manually when this option is set.